#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <functional>
#include<vector>
#include <signal.h>

//4、信号的保存
void handler(int sig)
{
    std::cout<<"hello sig: "<<sig<<std::endl;
    signal(2,SIG_DFL); //2号信号默认动作是终止
    std::cout<<"恢复处理动作"<<std::endl;
}
int main()
{
    signal(2,handler);//自定义捕捉
    //signal(2,SIG_IGN);
    while(true)
    {
        sleep(1);
        std::cout<<"."<<std::endl;
    }
    return 0;
} 



//3、设置重复闹钟,每隔一秒，完成一些任务

// //////////func////////////
// void Sched()
// {
//     std::cout << "我是进程调度" << std::endl;
// }
// void MemManger()
// {
//     std::cout << "我是周期性的内存管理，正在检查有没有内存问题" << std::endl;
// }
// void Fflush()
// {
//     std::cout << "我是刷新程序，我在定期刷新内存数据，到磁盘" << std::endl;
// }
// /////////////////////////

// using func_t = std::function<void()>;
// std::vector<func_t> funcs;

// void SigHandler(int sig)
// {
//     std::cout << "##############################" << std::endl;
//     for(auto f : funcs)
//         f();
//     std::cout << "##############################" << std::endl;
//     alarm(1);
// }
// int main()
// {
//     funcs.push_back(Sched);
//     funcs.push_back(MemManger);
//     funcs.push_back(Fflush);
//     signal(SIGALRM,SigHandler);
//     alarm(1);
//     while (true) //让进程处于暂停状态由外部的信号来驱动每隔一秒钟完成一次任务，这就是操作系统！
//     {
//         pause(); 
//     }
//     return 0; 
// }



// 2、体会IO效率问题
// long long cnt = 0;
// void SigHandler(int sig)
// {
//     std::cout << "获得了一个信号: " << sig <<" , cnt: "<<cnt<< std::endl;
//     exit(13);
// }
// int main()
// {
//     signal(SIGALRM,SigHandler);
//     alarm(1);
//     while (true)
//     {
//         cnt++;
//     }
//     return 0;
// }



// // 1、验证alarm函数的作用
// void SigHandler(int sig)
// {
//     std::cout << "获得了一个信号: " << sig << std::endl;
//     exit(13);
// }
// int main()
// {
//     // 把所有的普通信号全都自定义捕捉
//     for (int i = 1; i < 32; i++)
//     {
//         signal(i, SigHandler);
//     }
//     alarm(1);
//     int cnt = 0;
//     while (true)
//     {
//         //本质是IO xshell->./XXX->云服务器->网络->我们看到
//         std::cout << "cnt: " << cnt++ << std::endl; //打印效率不高！
//     }
//     return 0;
// }
